package com.gin.ehdownloader.utils.json;

import com.fasterxml.jackson.databind.JavaType;
import com.gin.ehdownloader.utils.FileIoUtils;
import jakarta.validation.constraints.NotNull;

import java.io.File;
import java.io.IOException;

/**
 * 在json文件中保存数据的类
 * @author : ginstone
 * @version : v1.0.0
 * @since : 2023/3/15 09:24
 */
public class JsonDataFile<T> {
    /**
     * 保存的数据
     */
    protected final T data;
    /**
     * 保存到的文件
     */
    protected final File file;
    /**
     * 用于反序列化
     */
    protected final JavaType javaType;

    public JsonDataFile(T data, @NotNull File file, @NotNull JavaType javaType) throws IOException {
        this.javaType = javaType;
        this.file = file;

        if (file.exists()) {
            // 如果文件存在，从文件中读取 data
            this.data = FileIoUtils.readObj(file, javaType);
        } else {
            // 如果文件不存在, 使用 data 初始化
            this.data = data;
        }
        saveData();
    }

    public T getData() {
        return data;
    }

    /**
     * 保存数据
     */
    public void saveData() throws IOException {
        FileIoUtils.writeObj(file, data);
    }
}
